home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_400 / 414_02 / private / _shadow.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-08-12  |  2.6 KB  |  149 lines

  1. #define    CURSES_LIBRARY    1
  2. #include <curses.h>
  3.  
  4.  
  5. #ifdef PDCDEBUG
  6. char *rcsid__shadows = "$Header: k:/tools/src/curses/private/rcs/_shadow.c 2.1.0.1 93/08/13 14:19:49 frotz Beta2 $";
  7. #endif
  8.  
  9.  
  10.  
  11.  
  12. /*man-start*********************************************************************
  13.  
  14.   PDC_shadows()    - generate shadows inside wnoutrefresh().
  15.  
  16.   PDCurses Description:
  17.      This is a private PDCurses function.
  18.  
  19.      Generates a shadow in the opposite direction of the window's light source.
  20.     Uses the specified window's shadow character/attribute to create the
  21.     shadow.  The shadow is cast onto the window bg.
  22.  
  23.   PDCurses Return Value:
  24.      This routine returns OK.
  25.  
  26.   PDCurses Errors:
  27.      No errors are defined for this routine.
  28.  
  29.   Portability:
  30.      PDCurses    int    PDC_shadows( WINDOW* w, WINDOW* bg );
  31.  
  32. **man-end**********************************************************************/
  33.  
  34. int    PDC_shadows( WINDOW* w, WINDOW* bg )
  35. {
  36.     int    sy;
  37.     int    sx;
  38.     int    ey;
  39.     int    ex;
  40.     int    i;
  41.     bool    skip    = FALSE;
  42.  
  43.     switch (w->_shadow)
  44.     {
  45.     case NORTH_EAST:
  46.         sy    = w->_begy + w->_maxy;
  47.         sx    = w->_begx-1;
  48.         ex    = w->_begx + w->_maxx-1;
  49.         break;
  50.  
  51.     case NORTH_WEST:
  52.         sy    = w->_begy + w->_maxy;
  53.         sx    = w->_begx+1;
  54.         ex    = w->_begx + w->_maxx+1;
  55.         break;
  56.  
  57.     case NORTH:
  58.         sy    = w->_begy + w->_maxy;
  59.         sx    = w->_begx;
  60.         ex    = w->_begx + w->_maxx;
  61.         break;
  62.  
  63.     case SOUTH_EAST:
  64.         sy    = w->_begy-1;
  65.         sx    = w->_begx-1;
  66.         ex    = w->_begx + w->_maxx-1;
  67.         break;
  68.  
  69.     case SOUTH_WEST:
  70.         sy    = w->_begy-1;
  71.         sx    = w->_begx+1;
  72.         ex    = w->_begx + w->_maxx+1;
  73.         break;
  74.  
  75.     case SOUTH:
  76.         sy    = w->_begy-1;
  77.         sx    = w->_begx;
  78.         ex    = w->_begx + w->_maxx;
  79.         break;
  80.  
  81.     case EAST:
  82.     case WEST:
  83.     default:
  84.         skip    = TRUE;
  85.         break;
  86.     }
  87.     if  (!skip)
  88.     {
  89.         for( i=sx; i<ex; i++ )
  90.         {
  91.             mvwaddrawch( bg, sy, i, w->_shadow_char );
  92.         }
  93.     }
  94.  
  95.     skip = FALSE;
  96.     switch (w->_shadow)
  97.     {
  98.     case NORTH_EAST:
  99.         sx    = w->_begx-1;
  100.         sy    = w->_begy+1;
  101.         ey    = w->_begy+w->_maxy;
  102.         break;
  103.  
  104.     case SOUTH_EAST:
  105.         sx    = w->_begx-1;
  106.         sy    = w->_begy-1;
  107.         ey    = w->_begy+w->_maxy-1;
  108.         break;
  109.  
  110.     case EAST:
  111.         sx    = w->_begx-1;
  112.         sy    = w->_begy;
  113.         ey    = w->_begy+w->_maxy;
  114.         break;
  115.  
  116.     case NORTH_WEST:
  117.         sx    = w->_begx+w->_maxx;
  118.         sy    = w->_begy+1;
  119.         ey    = w->_begy+w->_maxy;
  120.         break;
  121.  
  122.     case SOUTH_WEST:
  123.         sx    = w->_begx+w->_maxx;
  124.         sy    = w->_begy-1;
  125.         ey    = w->_begy+w->_maxy-1;
  126.         break;
  127.  
  128.     case WEST:
  129.         sx    = w->_begx+w->_maxx;
  130.         sy    = w->_begy;
  131.         ey    = w->_begy+w->_maxy;
  132.         break;
  133.  
  134.     case NORTH:
  135.     case SOUTH:
  136.     default:
  137.         skip = TRUE;
  138.         break;
  139.     }
  140.     if  (!skip)
  141.     {
  142.         for( i=sy; i<ey; i++ )
  143.         {
  144.             mvwaddrawch( bg, i, sx, w->_shadow_char );
  145.         }
  146.     }
  147.     return( OK );
  148. }
  149.